iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0

VI.FUME
24 組合Bundle

終於到FUME的最後了,今天要討論的是要怎麼把一個Bundle組起來,
昨天討論到了可以用$resolve()與$search()將不同的Resource包攬進來,

但無論用不用搜尋功能,我們還是把Bundle組出來,

今天的架構會比較大一點,我會慢慢講。

在FUME的撰寫一開始,我們先令一個Bundle Resource,並填入必要的項
(以下僅供參考,不提供輸入內容)

#FUME
(
$serverURL := "https://test.com.tw/fhir/"

$entries := (

);

InstanceOf: Bundle
  * id = bundle_id
  * meta
	* profile = bundle_profile
  * type = 'collection'
  * timestamp = $now()

  * ($entries).entry 
	* resource = $ 
	* fullUrl = $serverURL & resourceType & ($exists(id) ? '/' & id : '' ) 
)

這是最基礎的模板,除了基本該填入的bundle_id, bundle_profile之外,
為了讓驗證器能夠順利驗證過,在entry的部分我們要先定義出他的fullUrl,這樣驗證器確認他是一個有效的url才不會報錯。

可以注意到entry那邊套了一個$entries的物件,

這個$entries基本上是在交代所有的子Resource都包含在這個$entries裡面。

現在這樣子是已經可以完成一個Bundle Resource了,但是這個Bundle裡面空空如也。

所以接下來要來處理$entries

#FUME
$entries := (
	$subResource1 := ();
	$subResource2 := ();
	...
	
	[$subResource1, $subResource2, $...];
);

前面在討論FUME的特性的時候有提到,FUME在單一物件中永遠只會執行最後一行,
所以最後一行以一個array的方式把所有包含在entries內的物件都包括起來,

而這個entries最後是一個array,剛好可以作為Bundle中Entry欄位的複數對應,

這裡完成了之後,只要分別實作$subResource就可以把整個Bundle組起來了,

那當然的,$subResource也可以透過$resolve或$search來完成,這就是把別人家的Resource拿來組成自己的Bundle的過程,

$subResource := (
    InstanceOf: ResourceType
    * id = resource_id
    * meta
      * profile = resource_profile
    * status = resource_status
    * valueString = "resource_valueString"

);

這樣講起來很抽象,接下來的部分我會拿實際有在使用的IG來示範一下要怎麼從0開始的把Bundle組出來,

並且實際帶大家來閱讀一次IG,並且實作出一個可以轉換出該IG Bundle Profile的FUME Mapping出來

那邊的內容會有點長,

題外話,我真的快被MarkDown搞死了,那個程式碼區塊語法好難用Orz


上一篇
[FUME TO FHIR] 23 FUME FHIR Function($resolve, $search, $literal)
下一篇
[FUME TO FHIR] 25 TWPAS/TWCI 實戰簡介,思路分析
系列文
30天FUME TO FHIR轉換實戰 - 從入門到燃燒殆盡30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言